上一篇和各位介紹了測試函數的編寫,以及測試成功的範例,那今天要介紹的是測試失敗的範例和更多測試的方式
再測試前,我故意將add(2, 7)
的結果設為10,我們來看一下會輸出什麼結果
可以看到輸出內容非常明確的提示了哪個函數出現錯誤,這時就可以依照錯誤訊息去做適當修正
@pytest.mark.parametrize
是 Pytest 提供的一個裝飾器,可以用來傳遞多組參數到測試函數,藉以避免太多重複的程式碼。
test_add()
測試函數來做示範project_test.py
import project
import pytest
@pytest.mark.parametrize("a, b, return_", [
(1, 2, 3),
(3, 4, 7),
(2, 6, 8),
(2, 7, 9),
(2, 8, 10),
])
def test_add(a, b, return_):
assert project.add(a, b) == return_
def test_sub():
assert project.sub(2, 6) == -4
assert project.sub(2, 7) == -5
def test_mul():
assert project.mul(2, 6) == 12
assert project.mul(2, 7) == 14
def test_div():
assert project.div(6, 2) == 3
assert project.div(8, 2) == 4
def test_ironman():
assert project.ironman(26) == "Share More Gain More: DAY26"
assert project.ironman(27) == "Share More Gain More: DAY27"
可以看到每一個參數都有成功傳入並測試成功
@pytest.mark.skip
用來跳過測試,通常會在該函數尚未完成時使用。
project_test.py
import project
import pytest
@pytest.mark.parametrize("a, b, return_", [
(1, 2, 3),
(3, 4, 7),
(2, 6, 8),
(2, 7, 9),
(2, 8, 10),
])
def test_add(a, b, return_):
assert project.add(a, b) == return_
@pytest.mark.skip(reason="有Bug待修復")
def test_sub():
assert project.sub(2, 6) == -4
assert project.sub(2, 7) == -5
測試結果
可以看到測試test_sub()
被跳過了,並且顯示理由
@pytest.mark.skipif
和上一個裝飾器功能類似,也是用來跳過測試,但是他是依照特定條件,若條件為真則跳過測試
下面範例透過設定一個旗標來強制跳過測試
project_test.py
import project
import pytest
@pytest.mark.parametrize("a, b, return_", [
(1, 2, 3),
(2, 7, 9),
(2, 8, 10),
])
def test_add(a, b, return_):
assert project.add(a, b) == return_
flag = 'skip'
@pytest.mark.skipif(flag == 'skip',reason="強制跳過測試")
def test_sub():
assert project.sub(2, 6) == -4
assert project.sub(2, 7) == -5
測試結果
可以看到條件達成後test_sub()
成功被跳過了,並且顯示理由
下一篇將繼續介紹更多 Pytest 的使用方法和細節!